iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
2
Modern Web

30天就Go:教你打造LINE自動回話機器人系列 第 8

30天就Go(6):變數的可視範圍

  • 分享至 

  • xImage
  •  

可視範圍

變數的宣告其實也是門學問,很多新手會想說"全部都宣告全域變數就好了啊",但為了安全性、可讀性以及有效的執行最小權限原則(即為要用到的變數才看的到,用不到的就不需要看到),這篇就仔細地跟大家講解

package

同一個package可以視為程式碼都在同一個檔案內

package main

var x = 5
package main

import "fmt"

func main() {
    fmt.Println(x) // 5
}

雖然沒宣告,但從上一個檔案可以看到x = 5

package(exported/unexported)

如同上一篇提到,在package中大小寫的區別會造成exported和unexported:

person/personName.go

package person

var MyName = "Micheal" // exported
var yourName = "Tony" // unexported
package main

import {
    "fmt"
    "github.com/TroyCode/GoIn30Days/day6/person"
}

func main {
    fmt.Println(person.MyName) // Micheal
    fmt.Println(person.yourName) // 錯誤,因為是unexported
}

括號內的變數{}

括號內的變數只要是同樣在括號內都能使用,括號外則不行

package main 

import "fmt"

func main() {
    x := 1
    foo() // 錯誤,因為x屬於main中的變數
}

func foo() {
    fmt.Println(x)
}

全域變數

這個比較猛,意思就是在程式中都能讀到他,每的地方的操作都會改變他的值

package main

import "fmt"

var x = 0

func xPlus() {
    x++
}

func main() {
    x++ // x = 1
    xPuls() // x = 2
}

順序

宣告的順序當然也很重要,宣告之後才可用

package main

import "fmt"

func main() {
    x := 5
    fmt.Println(x)
    fmt.Println(y) // 這樣是找不到y的
    y := 10
}

變數和函式名稱相同

這樣用是不會出錯,但是不建議,日後debug可能造成麻煩

package main

import "fmt"

func foo(x int) int {
    return x + 1
}

func main() {
    foo := foo(1) // 第一個foo是變數,第二個是函式
}

上一篇
30天就Go(6):淺談package
下一篇
30天就Go(8):Function(前)
系列文
30天就Go:教你打造LINE自動回話機器人23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言